5512
9490
Quero excluir um ramo local e remotamente.
Tentativas falhadas de excluir uma filial remota
$ git branch -d remotes / origin / bugfix
erro: branch 'remotes / origin / bugfix' não encontrado.
$ git branch -d origin / bugfix
erro: branch 'origin / bugfix' não encontrado.
$ git branch -rd origin / bugfix
Remoção de origem / correção de bug do branch remoto (era 2a14ef7).
$ git push
Tudo em dia
$ git pull
De github.com:gituser/gitproject
* [novo ramo] correção de bug -> origem / correção de bug
Já atualizado.
O que devo fazer de diferente para excluir com êxito o branch remotes / origin / bugfix tanto local quanto remotamente? 
1
2
Próximo
Sumário executivo
$ git push -d  
$ git branch -d 
Observe que, na maioria dos casos, o nome remoto é a origem.
Nesse caso, você terá que usar o comando dessa forma.
$ git push -d origin 
Excluir filial local
Para excluir a filial local, use um dos seguintes:
$ git branch -d branch_name
$ git branch -D branch_name
Nota: A opção -d é um apelido para --delete, que apenas exclui o branch se ele já tiver sido totalmente mesclado em seu branch upstream. Você também pode usar -D, que é um apelido para --delete --force, que exclui o branch "independente de seu status mesclado." [Fonte: man git-branch]
Observe também que git branch -d branch_name irá falhar se você estiver
no ramo que você deseja remover. A mensagem começa com
erro: Não é possível excluir o branch 'branch_name'. Se sim, primeiro troque
para algum outro branch, por exemplo: git checkout master.
Excluir filial remota [atualizado em 8 de setembro de 2017]
A partir do Git v1.7.0, você pode excluir um branch remoto usando
$ git push  --delete 
que pode ser mais fácil de lembrar do que
$ git push : 
que foi adicionado no Git v1.5.0 "para excluir um branch remoto ou uma tag."
A partir do Git v2.8.0, você também pode usar git push com a opção -d como um apelido para --delete.
Portanto, a versão do Git que você instalou determinará se você precisa usar a sintaxe mais fácil ou mais difícil.
Excluir filial remota [resposta original de 5 de janeiro de 2010]
Do Capítulo 3 do Pro Git por Scott Chacon:
Excluindo Ramificações Remotas
Suponha que você tenha terminado com um branch remoto - digamos, você e seus colaboradores terminaram com um recurso e o fundiram em seu branch master remoto (ou qualquer branch em que sua linha de código estável esteja). Você pode deletar um branch remoto usando a sintaxe obtusa git push [remotename]: [branch]. Se você deseja excluir o branch de correção do servidor do servidor, execute o seguinte:
$ git push origin: serverfix
Para git@github.com: schacon / simplegit.git
- [excluído] serverfix
Estrondo. Não há mais ramificações em seu servidor. Você pode querer dobrar esta página, porque você precisará desse comando e provavelmente esquecerá a sintaxe. Uma maneira de lembrar esse comando é relembrando a sintaxe git push [remotename] [localbranch]: [remotebranch] que examinamos um pouco antes. Se você deixar de fora a parte [ramo local], basicamente estará dizendo: “Não tome nada do meu lado e faça com que seja [ramo remoto].
Eu emiti git push origin: bugfix e funcionou perfeitamente. Scott Chacon estava certo - vou querer dar ouvidos a essa página (ou virtualmente fazer ouvidos ao responder isso no Stack Overflow).
Então você deve executar isso em outras máquinas
# Obter alterações de todos os controles remotos e excluir localmente
# ramos / tags excluídos remotos etc.
# --prune fará o trabalho: -;
git fetch --all --prune
para propagar as mudanças.
|
A resposta de Matthew é ótima para remover branches remotos e também agradeço a explicação, mas para fazer uma distinção simples entre os dois comandos:
Para remover uma filial local de sua máquina:
git branch -d {the_local_branch} (use -D em vez de forçar a exclusão do branch sem verificar o status da fusão)
Para remover uma filial remota do servidor:
git push origin --delete {the_remote_branch}
Referência: Git: Excluir um branch (local ou remoto)
|
As respostas curtas
Se você quiser explicações mais detalhadas sobre os comandos a seguir, consulte as respostas longas na próxima seção.
Excluindo uma filial remota
git push origin --delete  # Git versão 1.7.0 ou mais recente
git push origin -d  # Versão mais curta (Git 1.7.0 ou mais recente)
git push origin:  # versões do Git anteriores a 1.7.0
Excluindo uma filial local
branch git --delete 
git branch -d  # versão mais curta
git branch -D  # Forçar exclusão de branches não mesclados
Excluindo uma filial de rastreamento remoto local
git branch --delete --remotes  / 
git branch -dr  /  # Shorter
git fetch  --prune # Excluir vários ramos obsoletos de rastreamento remoto
git fetch  -p # Shorter
A resposta longa: existem três ramos diferentes para excluir!
Quando você estiver lidando com a exclusão de branches local e remotamente, lembre-se de que existem três branches envolvidos:
A filial local X.
O ramo de origem remota X.
A ramificação de rastreamento remoto local origin / X que rastreia a ramificação remota X.
O pôster original usou:
git branch -rd origin / bugfix
Que apenas excluiu sua origem / correção de bug do branch de rastreamento remoto local, e não a correção de bug do branch remoto real na origem.
Para excluir esse ramo remoto real, você precisa
git push origin --delete bugfix
Detalhes adicionais
As seções a seguir descrevem detalhes adicionais a serem considerados ao excluir suas ramificações remotas e de rastreamento remoto.
Empurrar para excluir ramos remotos também remove ramos de rastreamento remoto
Observe que deletar o branch remoto X da linha de comandousar um git push também removerá o branch de rastreamento remoto local origin / X, então não é necessário podar o branch de rastreamento remoto obsoleto com git fetch --prune ou git fetch -p. No entanto, não faria mal se você fizesse isso de qualquer maneira.
Você pode verificar se a origem / X do ramo de rastreamento remoto também foi excluída executando o seguinte:
# Visualize apenas ramos de rastreamento remoto
git branch --remotes
git branch -r
# Visualize ramos estritamente locais e de rastreamento remoto
git branch --all
git branch -a
Removendo a origem obsoleta do ramo de rastreamento remoto local / X
Se você não excluiu seu branch remoto X da linha de comando (como acima), então seu repositório local ainda conterá (um agora obsoleto) branch de rastreamento remoto origin / X. Isso pode acontecer se você excluiu um branch remoto diretamente por meio da interface da web do GitHub, por exemplo.
Uma maneira típica de remover esses branches obsoletos de rastreamento remoto (desde o Git versão 1.6.6) é simplesmente executar git fetch com --prune ou -p mais curto. Observe que isso remove todos os ramos de rastreamento remoto locais obsoletos para quaisquer ramos remotos que não existem mais no remoto:
git fetch origin --prune
git fetch origin -p # Shorter
Aqui está a citação relevante das notas de versão 1.6.6 (ênfase minha):
"git fetch" aprendeu --all e --multipleoptions, a executar fetch de
muitos repositórios e opção --prune para remover o rastreamento remoto
ramos que ficaram velhos. Isso torna "git remote update" e "git
poda remota "menos necessária (não há planos para remover" remota
atualizar "nem" poda remota ", entretanto).
Alternativa à poda automática acima para ramos obsoletos de rastreamento remoto
Alternativamente, em vez de podar seus branches locais obsoletos de rastreamento remoto através de git fetch -p, você pode evitar fazer a operação de rede extra apenas removendo manualmente o (s) branch (s) com as opções --remote ou -r:
git branch --delete --remotes origin / X
git branch -dr origin / X # Shorter
Veja também
git-branch (1) Página do manual.
git-fetch (1) Página de manual.
Pro Git § 3.5 Ramificação Git - Ramificações remotas.
|
Etapas para excluir uma filial:
Para excluir a filial remota:
git push origin --delete 
Para excluir a filial local, você tem três maneiras:
1: git branch -D 
2: git branch --delete --force  # O mesmo que -D
3: git branch --delete  # Erro ao desfazer a mesclagem
Explique: OK, apenas explique o que está acontecendo aqui!
Simplesmente faça git push origin --delete para deletar somente seu branch remoto, adicione o nome do branch no final e isto irá deletar e enviar para remoto ao mesmo tempo ...
Além disso, git branch -D, que simplesmente exclui apenas o branch local! ...
-D significa --delete --force que irá deletar o branch mesmo que ele não esteja mesclado (force delete), mas você também pode usar -d que significa --delete que lança um erro respectivo do status de fusão do branch ...
Também crio a imagem abaixo para mostrar as etapas:
|
Você também pode usar o seguinte para excluir a filial remota
git push --delete origin serverfix
Que faz a mesma coisa que
git push origin: serverfix
mas pode ser mais fácil de lembrar.
|
Dica: Quando você exclui branches usando
git branch -d  # Exclui branch local
ou
git push origin:  # Exclui branch remoto
apenas as referências são excluídas. Mesmo que o branch seja realmente removido no remoto, as referências a ele ainda existem nos repositórios locais dos membros da sua equipe. Isso significa que, para outros membros da equipe, os branches excluídos ainda são visíveis quando eles fazem um branch git -a.
Para resolver isso, os membros da sua equipe podem podar os ramos excluídos com
git remote prune 
Normalmente, essa é a origem do git remote prune.
|
Se você deseja excluir um branch, primeiro faça check-out no branch que não seja o branch a ser excluído.
git checkout other_than_branch_to_be_deleted
Excluindo a filial local:
git branch -D branch_to_be_deleted
Excluindo a filial remota:
git push origin --delete branch_to_be_deleted
|
git branch -D 
git branch -D -r origin / 
git push origin: 
|
É simples: basta executar o seguinte comando:
Para excluir um branch Git local e remotamente, primeiro exclua o branch local usando este comando:
git branch -d example
(Aqui, o exemplo é o nome do ramo.)
E depois disso, exclua o branch remoto usando este comando:
git push origin: exemplo
|
É muito simples:
Para excluir a filial remota
git push -d origin 
Ou
git push origin: 
Para excluir forçosamente a filial local
git branch -D 
|
Outra abordagem é:
git push --prune origin
AVISO: Isso excluirá todas as ramificações remotas que não existem localmente. Ou de forma mais abrangente,
git push --mirror
irá efetivamente fazer com que o repositório remoto se pareça com a cópia local do repositório (cabeçotes locais, remotos e tags são espelhados no remoto).
|
Eu uso o seguinte em minhas configurações de Bash:
alias git-shoot = "git pushorigin --delete "
Então você pode ligar para:
nome do ramo git-shoot
|
Excluir localmente:
Para excluir uma filial local, você pode usar:
git branch -d 
Para excluir um branch à força, use -D em vez de -d.
git branch -D 
Excluir remotamente:
Existem duas opções:
git push origin: branchname
git push origin - excluir nome do branch
Eu sugiro que você use a segunda maneira, pois é mais intuitiva.
|
Desde janeiro de 2013, o GitHub incluiu um botão Excluir branch ao lado de cada branch em sua página "Ramificações".
Postagem de blog relevante: Criar e excluir branches
|
Se quiser concluir essas duas etapas com um único comando, você pode criar um alias para ele adicionando o seguinte ao seu ~ / .gitconfig:
[alias]
rmbranch = "! f () {git branch -d $ {1} && git push origin --delete $ {1};}; f"
Como alternativa, você pode adicionar isso à sua configuração global a partir da linha de comando usando
git config --global alias.rmbranch \
'! f () {git branch -d $ {1} && git push origin --delete $ {1}; }; f '
NOTA: Se usar -d (d minúsculo), a ramificação só será excluída se tiver sido mesclada. Para forçar a exclusão, você precisará usar -D (D maiúsculo).
|
Para excluir sua filial local e remotamente
Check-out para o branch master - git checkout master
Exclua seu branch remoto - git push origin --delete 
Exclua seu branch local - branch git --delete 
|
Você também pode fazer isso usando git remote prune origin
$ git remote prune origin
Origem da poda
URL: git@example.com/yourrepo.git
* [podado] origin / some-branchs
Ele remove e exclui branches de rastreamento remoto de uma listagem -r branch git.
|
Além das outras respostas, costumo usar a ferramenta git_remote_branch. É uma instalação extra, mas fornece uma maneira conveniente de interagir com branches remotos. Neste caso, para excluir:
grb delete branch
Eu também uso os comandos publicar e rastrear com bastante frequência.
|
Um comando de uma linha para excluir local e remoto:
D = nome do ramo; git branch -D $ D; origem do git push: $ D
Ou adicione o alias abaixo ao seu ~ / .gitconfig. Uso: git kill branch-name
[alias]
kill = "! f () {git branch -D \" $ 1 \ "; git push origin --delete \" $ 1 \ ";}; f"
|
Excluindo ramos
Vamos supor que nosso trabalho no "formulário de contato" do branch está concluído e já o integramos ao "master". Como não precisamos mais dele, podemos excluí-lo (localmente):
$ git branch -d contact-form
E para excluir o branch remoto:
git push origin --delete contact-form
|
Excluir filial remota
git push origin: 
Excluir filial local
git branch -D 
Excluir etapas da filial local:
checkout para outra filial
deletar filial local
|
Basta dizer:
git branch -d 
git push origin: 
|
git push origin --delete 
é mais fácil de lembrar do que
git push origin: branchName
|
Agora você pode fazer isso com o aplicativo GitHub Desktop.
Depois de lançar o aplicativo
Clique no projeto que contém o ramo
Mude para o branch que você gostaria de excluir
No menu "Branch", selecione "Unpublish ..." para que o branch seja excluído dos servidores GitHub.
No menu "Branch", selecione 'Excluir "branch_name" ...', para que o branch seja excluído de sua máquina local (também conhecida como a máquina em que você está trabalhando atualmente)
|
Para excluir localmente - (normal)
git branch -d my_branch
Se o seu branch está em um processo de rebasing / merge e isso não foi feito corretamente, significa que você receberá um erro Rebase / Merge em andamento, então, nesse caso, você não será capaz de deletar seu branch.
Portanto, ou você precisa resolver o rebasing / mesclagem. Caso contrário, você pode forçar a exclusão usando,
git branch -D my_branch
Para excluir remotamente:
git push --delete origin my_branch
Você pode fazer o mesmo usando:
git push origin: my_branch # Fácil de lembrar, ambos farão o mesmo.
Representação gráfica:
|
Isso não funcionará se você tiver uma tag com o mesmo nome do branch no remoto:
$ git push origin: branch-or-tag-name
erro: dst refspec branch-or-tag-name corresponde a mais de um.
erro: falha ao enviar alguns refs para 'git@github.com: SomeName / some-repo.git'
Nesse caso, você precisa especificar que deseja excluir o branch, não a tag:
git push origin: refs / heads / branch-or-tag-name
Da mesma forma, para excluir a tag em vez do branch que você usaria:
git push origin: refs / tags / branch-or-tag-name
|
Muitas das outras respostas levarão a erros / avisos. Esta abordagem é relativamente à prova de idiotas, embora você ainda possa precisar de git branch -D branch_to_delete se não estiver totalmente integrado em some_other_branch, por exemplo.
git checkout some_other_branch
git push origin: branch_to_delete
git branch -d branch_to_delete
A poda remota não é necessária se você excluiu o branch remoto. Ele é usado apenas para obter os controles remotos mais atualizados disponíveis em um repositório que você está rastreando. Observei que o git fetch adiciona remotos, não os remove. Aqui está um exemplo de quando git remote prune origin realmente fará algo:
Usuário Aexecuta as etapas acima. O usuário B executaria os seguintes comandos para ver os branches remotos mais atualizados:
git fetch
git remote prune origin
git branch -r
|
Fiquei cansado de procurar essa resposta no Google, então usei uma abordagem semelhante para a resposta que crizCraig postou anteriormente.
Eu adicionei o seguinte ao meu perfil Bash:
function gitdelete () {
git push origin - excluir $ 1
git branch -D $ 1
}
Então, toda vez que termino um branch (mesclado com o master, por exemplo), executo o seguinte em meu terminal:
gitdelete my-branch-name
... que então exclui meu nome do ramo da origem e também localmente.
|
Antes de executar
branch git --delete 
certifique-se de determinar primeiro qual é o nome exato do branch remoto executando:
git ls-remote
Isso lhe dirá o que inserir exatamente para o valor . (o branch diferencia maiúsculas de minúsculas!)
|
Usar:
git push origin: bugfix # Exclui branch remoto
git branch -d bugfix # Deve excluir o branch local manualmente
Se você tem certeza de que deseja excluí-lo, execute
git branch -D bugfix
Agora, para limpar ramos remotos excluídos, execute
git remote prune origin
|
1
2
Próximo
Questão altamente ativa. Ganhe 10 reputação para responder a esta pergunta. O requisito de reputação ajuda a proteger essa pergunta contra spam e atividades sem resposta.
Não é a resposta que você está procurando? Navegue por outras questões com a tag git version-control git-branch git-push git-remote ou faça sua própria pergunta.